package BakaNoPackage.Donnees;

import BakaNoPackage.Exception.EntiteIntrouvableException;

/**
 * @author Nicolas Muller
 *
 * Une entité représente tout objet contenu dans une saison
 */
/**
 * @author mule
 *
 */
public abstract class Entite {
	
	private int ID;
	private int IDSaison;
	private String Nom;
	private String Synopsis;
	Donnees donnees;

	/**
	 * Construccteur
	 * 
	 * @param id Identificateur de l'entité
	 * @param saison Identificateur de la saison de l'entité
	 * @param nom Nom de l'entité
	 * @param synopsis Desciption de l'entité
	 * @param donnees Gestionnaire de données à utiliser
	 */
	protected Entite(int id, int saison, String nom, String synopsis, Donnees donnees) {
		//super();
		ID = id;
		IDSaison = saison;
		Nom = nom;
		Synopsis = synopsis;
		this.donnees=donnees;
	}

	
	/**
	 * Donne l'id de l'entité
	 * 
	 * @return Identificateur
	 */
	public int getID() {
		return ID;
	}

	/**
	 * Donne l'identificateur de la saison mère
	 * 
	 * @return Identificateur de la mère
	 */
	public int getIDSaison() {
		return IDSaison;
	}
	
	
	/**
	 * Donne le nom de l'entité
	 * 
	 * @return Nom de de l'entité
	 */
	public String getNom() {
		return Nom;
	}

	/**
	 * Modifie le nom de l'entité
	 * 
	 * @param nom Nouveau nom
	 * @throws EntiteIntrouvableException 
	 */
	public void setNom(String nom) {
		Nom = nom;
		updateDB();
	}

	/**
	 * Donne la description de l'entité
	 * 
	 * @return Description
	 */
	public String getSynopsis() {
		return Synopsis;
	}

	/**
	 * Modifie la description de l'entité
	 * 
	 * @param synopsis Description
	 * @throws EntiteIntrouvableException 
	 */
	public void setSynopsis(String synopsis){
		Synopsis = synopsis;
		updateDB();
	}
	
	public abstract void delete() throws Exception;

	/**
	 * Met à jour les informations vers la base de données
	 * @throws EntiteIntrouvableException 
	 */
	protected abstract void updateDB();
	
	public String toString(){
		String retour = "Tome " + this.getNom();
		retour += "\nSynopsis: " + this.getSynopsis();
		return retour;
	}

}
